<?php
class AOrdenTrabajoAutomatica {

	public function __construct() {
	}
	/*
	 * Se informa  a la orden de actividad asociada que se est� comenzando. Si est� ya hab�a comnenzado,
	 * no se modifica el status
	 */
	public function inicia(EFacade & $facade) {

		$docOTA = & $facade->getDocumentRoot();
		$role=NULL;
			//Disparar la OM
		$OM = $docOTA->ordenMantenimiento;
		
		/********** LIBERAR LA RESERVA *************/
		$ezpdo_ = getManager();
		$consulta = "from MReservaEspecializacion as t where t.ordenTrabajoAutomatica = ?";
		$reservaciones = $ezpdo_->find($consulta,$docOTA);
		foreach($reservaciones as $reservacion){
			//echo "<hr>reserva: ",$reservacion;
			$ezpdo_->delete($reservacion);
		}
		/*******************************************/
		
		$workflow = & $OM->getWorkflowRef();
		$facade->session->refresh($workflow);
		$newEfacade = & EFacade :: initWorkflowWithoutRole($facade->session, $OM, 3);//tipo Process
		$transSet = & EFacade :: getCurrentTransSetAuto($workflow, /*PROCESS */ 3);
		$trans = $transSet->getTransByName('t12');
		$role = null;
		//Solo si esta disponible la t15
		if($trans){
			$newEfacade->fireTrans($trans, $role, "Culmina",TRUE);
			$workflow->epSetDirty(TRUE);
			$OM->epSetDirty(TRUE);
			$newEfacade->saveWorkflow();
		}

		//Disparo el agente en t3 de la OTA
		$docOTA->epSetDirty(TRUE);
	   	$usuario=NULL;
		$workflowSA = & $facade->getWorkflow();
		$workflowSA->epSetDirty(TRUE);
		$transSetSA = & EFacade :: getCurrentTransSetAuto($workflowSA, 2); //TYPE AUTO AGENT
		
		$transSA = $transSetSA->getTransByName('t3');
		$facade->fireTrans($transSA,$usuario,'Disparar', TRUE);
		
	}
	
	
	
	public function culmina(EFacade & $facade) {
		$mensaje='';
		
		echo "<hr>OTA: ",$docOTA = & $facade->getDocumentRoot();

		
		//Disparar la OM
		$OM = $docOTA->ordenMantenimiento;
		$solicitudMant= & $OM->solicitudMantenimiento;
		$solicitudMant->equipoAMantener->estaDisponible=TRUE;
		$solicitudMant->equipoAMantener->estaEnFalla=FALSE;
		$solicitudMant->equipoAMantener->estaEnMantenimiento=TRUE;
		$workflow = & $OM->getWorkflowRef();
		$facade->session->refresh($workflow);
		$newEfacade = & EFacade :: initWorkflowWithoutRole($facade->session, $OM, 3);//tipo Process
		$transSet = & EFacade :: getCurrentTransSetAuto($workflow, /*PROCESS */ 3);
		$placeSet = & EFacade :: getCurrentPlaceSet($workflow);
		
		$trans = $transSet->getTransByName('t15');
		$role = null;
		//Solo si esta disponible la t15
		if($trans){
			$newEfacade->fireTrans($trans, $role, "Culmina",TRUE);
			$workflow->epSetDirty(TRUE);
			$OM->epSetDirty(TRUE);
			$newEfacade->saveWorkflow();
		}

		//Disparo el agente en t5 de la OTA

		$docOTA->epSetDirty(TRUE);
	   	$usuario=NULL;
		$workflowSA = & $facade->getWorkflow();
		$workflowSA->epSetDirty(TRUE);
		$transSetSA = & EFacade :: getCurrentTransSetAuto($workflowSA, 2); //TYPE AUTO AGENT
		
		$transSA = $transSetSA->getTransByName('t5');
		$facade->fireTrans($transSA,$usuario,'Disparar', TRUE);
		
		/*************** Reporta averia ************************/
		$ezpdo_ = getManager();
		if($docOTA->averia){
			$SM = $facade->session->create('DSolicitudMantenimiento');
			if($docOTA->ordenMantenimiento->solicitudMantenimiento!=null)
				$SM->equipoAMantener = $docOTA->ordenMantenimiento->solicitudMantenimiento->equipoAMantener;
			else
				$SM->equipoAMantener = $docOTA->ordenMantenimiento->ordenInspeccion->requerimientoOriginal->equipoAMantener;
			//$SM->checkList = $docChLO;
			$SM->areaTrabajo = $ezpdo_->get('MAreaTrabajo',2);
			
			/*************** Tipo Falla **************/
			$man = $ezpdo_->create('MListaMantenimientoCorrectivo');			
			if($docOTA->tipoFalla!=null)
				$man->mantenimientoCorrectivo = $docOTA->tipoFalla;	
			$man->descripcion = $docOTA->descripcionAveria;
			$SM->mantenimientoCorrectivo[] = $man;
					
			$newEfacade =& EFacade :: initWorkflow($facade->session,  $SM, & $role);
			$transSet = & EFacade :: getCurrentTransSetAuto($newEfacade->getWorkflow(),3);//tipo process
			$trans = $transSet->getTransByName('t1');
			$usuario=NULL;
			$newEfacade->fireTrans($trans, $usuario, "Crear",TRUE);
			$SM->epSetDirty(TRUE);// marcar el documento para que sea salvado los cambios
			$newEfacade->saveWorkflow();
			$SM->commit();
			$SM->numero = $SM->getDocumentNumber();
			$role = NULL;	
			$SM->commit();
		}			
	}
}
?>